// 此处要求 Singleton 类只能有一个实例
// 饿汉模式，在类加载的时候创建实例
// 每个.java => .class => 被JVM加载到内存，得到类对象（近似认为是程序一启动，实则有变数）
class Singleton {
    // 加了 static，当前的成员成为 类属性，在类对象上的。类对象只有一个实例
    // 此处 instance 就可以保证在当前Java进程中只有一份
    // 加 final 关键字意味着 instance 要就地初始化，否则编译报错
    private static final Singleton instance = new Singleton();

    public static Singleton getInstance(){
        return instance;
    }

    // 单例模式最关键的要点，禁止构造方法被外部访问
    private Singleton(){

    }

}

public class Test1 {
    public static void main(String[] args) {
        // 此时其他代码想 new 这个实例，直接编译报错
        //Singleton singleton = new Singleton();

        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1 == s2);

    }
}
